///@file FEProblem.h
///@brief Declaration of the class representing a Finite Element problem
///@author Arnaud Duval
///@version 0.0
///@date 2011/03/03

#ifndef FEPROBLEM_H
#define FEPROBLEM_H

#include "Mesh.h"
#include "NodeGroup.h"

///@class FEProblem
///@brief Class defining a Finite Element problem
class FEProblem
{
    private:
        ///@brief Pointer to the mesh
        Mesh *mesh;
        ///@brief The node groups
        std::list<NodeGroup> nodeGroups;
        

    protected:

    public:
        ///@brief Default constructor
        FEProblem();
        ///@brief Constructor with arguments
        FEProblem(Mesh*);
        ///@brief destructor
        ~FEProblem();
        ///@brief Add a node group to current problem
        void AddNodeGroup(std::string);
        ///@brief Return true if group exists
        bool GroupExists(std::string);
        ///@brief Add a node to a group
        bool AddNodeToGroup(std::string, std::string);
        
        ///@brief Overload of << operator
        friend std::ostream& operator << (std::ostream&, const FEProblem&);
  

};


#endif